iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
0

接下來我們利用_buildEthHeader、_buildIPHeader和_buildUDPHeader來建構一個完整的DNS server
首先,在監聽到packet後,我們可以得到對方的MAC(dMAC),對方的IP(dIP),對方的port(dPort),我們就能夠根據這三個資料確定目的地位址

data = getIPFromData(udp_data)
packet = _buildEthHeader() + _buildIPHeader() + _buildUDPHeader() + data
sock.send(packet)

完整的程式碼可見:https://gist.github.com/kaichiachen/9409e9aa327827da4df36f553389c4e0

接下來是實驗的部分,在client端一樣用nc連接,由於DNS不像TCP需要先確認連接,所以直接跑
nc -u 172.17.0.2 20
Server端的部分

># iptables -t filter -I OUTPUT -p icmp --icmp-type 3 -j DROP
># python3 udp.py --port 20

然後在client端,可以輸入dns name,以“,”分割,例如
abc.com,def.com,ghi.com

在server端可以看到如下結果

2020-09-19 03:45:42 PM INFO  Listen on Port: 20
2020-09-19 03:45:48 PM INFO  From 172.17.0.5  ====>  abc.com > 1.2.3.4
2020-09-19 03:45:48 PM INFO  From 172.17.0.5  ====>  def.com > 2.3.4.5
2020-09-19 03:45:48 PM INFO  From 172.17.0.5  ====>  ghi.com > Unexisting dns name

上一篇
Day26 自幹DNS server(1)
下一篇
Day28 自幹Ping server(1)
系列文
那些年還給老師的TCP/IP五層結構 - 用Python進行網路封包分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言